import { HttpException, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Photo } from './photo.entity'
@Injectable()
export class PhotoService {
  constructor(
    @InjectRepository(Photo) private readonly photoRepo: Repository<Photo>,
  ) { }
  /**
     * 创建
     *
     * @param photo Photo 实体对象
     */
  async createPhoto(photo: Photo): Promise<Photo> {
    /**
     * 创建新的实体实例，并将此对象的所有实体属性复制到新实体中。 请注意，它仅复制实体模型中存在的属性。
     */
    // this.photoRepo.create(photo);

    // 插入数据时，删除 id，以避免请求体内传入 id
    delete photo.id;
    return this.photoRepo.save(photo);

    /**
     * 将给定实体插入数据库。与save方法不同，执行原始操作时不包括级联，关系和其他操作。
     * 执行快速有效的INSERT操作。不检查数据库中是否存在实体，因此如果插入重复实体，本次操作将失败。
     */
    // await this.photoRepo.insert(photo);
  }

  /**
   * 删除
   *
   * @param id ID
   */
  async deletePhoto(id: number): Promise<void> {
    await this.findOneById(id);
    this.photoRepo.delete(id);
  }

  /**
   * 更新
   *
   * @param id ID
   * @param photo Photo 实体对象
   */
  async updatePhoto(id: number, photo: Photo): Promise<void> {
    await this.findOneById(id);
    // 更新数据时，删除 id，以避免请求体内传入 id
    delete photo.id;
    this.photoRepo.update(id, photo);
  }

  /**
   * 根据ID查询
   *
   * @param id ID
   */
  async findOnePhoto(id: number): Promise<Photo> {
    return this.findOneById(id);
  }

  /**
   * 根据ID查询单个信息，如果不存在则抛出404异常
   * @param id ID
   */
  private async findOneById(id: number): Promise<Photo> {
    const photoInfo = await this.photoRepo.findOne(id);
    if (!photoInfo) {
      throw new HttpException(`指定 id=${id} 的用户不存在`, 404);
    }
    return photoInfo;
  }

  async selectPhotoList(query) {
    const photoList = await this.photoRepo.find(query);
    return photoList;
  }

  /**
 * 根据条件查询用户数组
 * @param query
 * @returns
 */
  async selectByQuery(query): Promise<Photo[]> {
    const userInfo = await this.photoRepo.find({
      relations: ['user', 'category'],
      where: query,
    });
    return userInfo;
  }
}
